# 作者:杨新远
# 2025年02月24日22时00分20秒
# 2273695640@qq.com
import re

# 匹配数字 0-99 或 100
ret = re.match(r"[1-9]?\d$|100$", "100")  # 使用正则表达式匹配 0-99 或 100
print(ret.group())  # 输出匹配到的结果

# 匹配 163、126、qq 邮箱
email_list = ["xiaoWang@163.com", "xiaoWang@126.com", "xiaoWang@163.comheihei", "xiaowang@qq.com"]
for email in email_list:
    # 使用正则表达式匹配邮箱
    # \w{5,20} 表示 5-20 位的字母、数字或下划线
    # @(163|126|qq) 表示 @ 后面跟着 163、126 或 qq
    # \.com$ 表示以 .com 结尾
    ret = re.match(r'\w{5,20}@(163|126|qq)\.com$', email)
    if ret:
        print(f'{email} 是合法的邮箱')  # 如果匹配成功，输出合法
    else:
        print(f'{email} 不是合法的邮箱')  # 如果匹配失败，输出不合法

print('-' * 50)  # 分隔线

# 匹配电话号码，提取区号和号码
# ([^-]+) 表示匹配非 - 的字符，直到遇到 -
# (\d+) 表示匹配数字
ret = re.match(r"([^-]+)-(\d+)", "010-12345678")  # 匹配电话号码
if ret:
    print(ret.group(1))  # 输出区号
    print(ret.group(2))  # 输出号码

# 学习引用分组
# 通过引用分组中匹配到的数据
# \1 表示引用第一个分组匹配到的内容
ret = re.match(r"<([a-zA-Z]*)>\w*</\1>", "<html>hh</html>")  # 匹配 HTML 标签
print(ret.group())  # 输出匹配到的结果

# 匹配嵌套的 HTML 标签
labels = ["<html><h1>www.cskaoyan.com</h1></html>", "<html><h1>www.cskaoyan.com</h2></html>"]
for label in labels:
    # 使用正则表达式匹配嵌套的 HTML 标签
    # <(\w*)> 匹配外层标签
    # <(\w*)> 匹配内层标签
    # .* 匹配标签内容
    # </\2> 匹配内层标签的闭合标签
    # </\1> 匹配外层标签的闭合标签
    ret = re.match(r"<(\w*)><(\w*)>.*</\2></\1>", label)
    if ret:
        print("%s 是符合要求的标签" % ret.group())  # 如果匹配成功，输出符合要求
    else:
        print("%s 不符合要求" % label)  # 如果匹配失败，输出不符合要求

# 使用命名分组匹配嵌套的 HTML 标签
for label in labels:
    # 使用命名分组匹配嵌套的 HTML 标签
    # <(?P<name1>\w*)> 匹配外层标签，并命名为 name1
    # <(?P<name2>\w*)> 匹配内层标签，并命名为 name2
    # .* 匹配标签内容
    # </(?P=name2)> 匹配内层标签的闭合标签
    # </(?P=name1)> 匹配外层标签的闭合标签
    ret = re.match(r"<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>", label)
    if ret:
        print("%s 是符合要求的标签" % ret.group())  # 如果匹配成功，输出符合要求
    else:
        print("%s 不符合要求" % label)  # 如果匹配失败，输出不符合要求